package com.lightboat.system.domain.request;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler;
import com.lightboat.common.annotation.Excel;
import com.lightboat.system.domain.CrmProduct;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.SchemaProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 商品套餐添加
 *
 * @author lightboat
 * @date 2025-08-14
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "商品套餐添加")
public class AddPackageProductRequest implements Serializable {
    private static final long serialVersionUID = 1L;

    /** 商品ID */
    @SchemaProperty(name = "商品ID")
    private Long productId;

    /** 外部商品ID */
    @SchemaProperty(name = "外部商品ID")
    @Excel(name = "外部商品ID")
    private String externalProductId;

    /** 外部套餐ID */
    @SchemaProperty(name = "外部套餐ID")
    @Excel(name = "外部套餐ID")
    private String externalPackageId;

    /** 类型（1自营，2百度平台） */
    @SchemaProperty(name = "类型（1自营，2百度平台）")
    @Excel(name = "类型", readConverterExp = "1=自营，2百度平台")
    private Integer type;

    /** 外部类型（0普通商品，1组合商品） */
    @SchemaProperty(name = "外部类型（0普通商品，1组合商品）")
    @Excel(name = "外部类型", readConverterExp = "0=普通商品，1组合商品")
    private Integer externalType;

    /** 使用类型 */
    @SchemaProperty(name = "使用类型")
    @Excel(name = "使用类型")
    private String usageType;

    /** 使用类型值 */
    @SchemaProperty(name = "使用类型值")
    @Excel(name = "使用类型值")
    private String usageTypeStr;

    /** 商品类型（1中西药品，2医疗器械,3保健品,4成人用品,5中药养生,6美妆个护,7母婴系列,8食品百货,9疫苗信息） */
    @SchemaProperty(name = "商品类型（1中西药品，2医疗器械,3保健品,4成人用品,5中药养生,6美妆个护,7母婴系列,8食品百货,9疫苗信息）")
    @Excel(name = "商品类型", readConverterExp = "1=中西药品，2医疗器械,3保健品,4成人用品,5中药养生,6美妆个护,7母婴系列,8食品百货,9疫苗信息")
    private Integer productCategory;

    /** 是否固定（1是，0否） */
    @Schema(title = "是否固定（1是，0否）")
    private Integer isFixed;

    /** 商品规格 */
    @SchemaProperty(name = "商品规格")
    @Excel(name = "商品规格")
    private String productSpec;

    /** 商品单位数 */
    @SchemaProperty(name = "商品单位数")
    @Excel(name = "商品单位数")
    private Integer productUnitNum;

    /** 属性信息 */
    @SchemaProperty(name = "属性信息")
    @TableField(typeHandler = Fastjson2TypeHandler.class)
    private JSONObject attributeInfo;

    /** 库存 */
    @SchemaProperty(name = "库存")
    @Excel(name = "库存")
    private Long stock;

    /** 成本价 */
    @SchemaProperty(name = "成本价")
    @Excel(name = "成本价")
    private BigDecimal costPrice;

    /** 销售价 */
    @SchemaProperty(name = "销售价")
    @Excel(name = "销售价")
    private BigDecimal salePrice;

    /** 商品名称 */
    @SchemaProperty(name = "商品名称")
    @Excel(name = "商品名称")
    private String productName;

    /** 商品标题 */
    @SchemaProperty(name = "商品标题")
    @Excel(name = "商品标题")
    private String productTitle;

    /** 商品多级标题 */
    @SchemaProperty(name = "商品多级标题")
    @Excel(name = "商品多级标题")
    private String productMultiTitle;

    /** 商品图片 */
    @SchemaProperty(name = "商品图片")
    @Excel(name = "商品图片")
    private String productImage;

    /** 赠品集合 */
    @SchemaProperty(name = "赠品集合")
    @Excel(name = "赠品集合")
    @TableField(typeHandler = Fastjson2TypeHandler.class)
    private List<CrmProduct> giftCollection;

    /** 商品集合 */
    @SchemaProperty(name = "商品集合")
    @Excel(name = "商品集合")
    @TableField(typeHandler = Fastjson2TypeHandler.class)
    private List<CrmProduct> productCollection;
}
